const fs = require('fs');
const path = require('path');
const sequelize = require('../config/db');
const { DataTypes, Model } = require('sequelize');

// 自动加载所有模型
const models = {};

// 读取当前目录下的所有模型文件
const modelFiles = fs.readdirSync(__dirname)
  .filter(file => {
    // 过滤出.js文件，但排除index.js本身
    return (file.indexOf('.') !== 0) && (file !== 'index.js') && (file.slice(-3) === '.js');
  });

// 先加载所有模型定义
modelFiles.forEach(file => {
  const modelDef = require(path.join(__dirname, file));
  // 处理不同类型的模型导出
  let model;
  if (typeof modelDef === 'function' && modelDef.prototype instanceof Model) {
    // 如果是类定义的模型
    model = new modelDef(sequelize, DataTypes);
  } else if (typeof modelDef === 'function') {
    // 如果是函数式导出的模型
    model = modelDef(sequelize, DataTypes);
  } else {
    // 如果是直接导出的模型实例
    model = modelDef;
  }
  models[model.name] = model;
});

// 确保所有模型都已初始化后再建立关联
Object.keys(models).forEach(modelName => {
  if (models[modelName].associate) {
    models[modelName].associate(models);
  }
});

// 导出模型和sequelize实例
module.exports = {
  ...models,
  sequelize
};

// 确保PunchPlan模型被正确导出
if (models.PunchPlan) {
  module.exports.PunchPlan = models.PunchPlan;
}
